using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ReadyToUseTools._Elevation
{
    /// <summary>
    /// <para>Profile</para>
    /// <para>Returns elevation profiles for the input line features.</para>
    /// <para>返回输入线要素的高程剖面图。</para>
    /// </summary>    
    [DisplayName("Profile")]
    public class Profile : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public Profile()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_InputLineFeatures">
        /// <para>Input Line Features</para>
        /// <para>The line features that will be profiled over the surface inputs.</para>
        /// <para>将在曲面输入上进行轮廓分析的线要素。</para>
        /// </param>
        public Profile(object _InputLineFeatures)
        {
            this._InputLineFeatures = _InputLineFeatures;
        }
        public override string ToolboxName => "Ready To Use Tools";

        public override string ToolName => "Profile";

        public override string CallName => "agolservices.Profile";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_InputLineFeatures, _ProfileIDField, _DEMResolution.GetGPValue(), _MaximumSampleDistance, _MaximumSampleDistanceUnits.GetGPValue(), _OutputProfile];

        /// <summary>
        /// <para>Input Line Features</para>
        /// <para>The line features that will be profiled over the surface inputs.</para>
        /// <para>将在曲面输入上进行轮廓分析的线要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Line Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _InputLineFeatures { get; set; }


        /// <summary>
        /// <para>Profile ID Field</para>
        /// <para>A unique identifier to associate profiles with their corresponding input line features.</para>
        /// <para>用于将截面梁与其对应输入线要素相关联的唯一标识符。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Profile ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _ProfileIDField { get; set; } = null;


        /// <summary>
        /// <para>DEM Resolution</para>
        /// <para><xdoc>
        ///   <para>Specifies the approximate spatial resolution (cell size) of the source elevation data used for the calculation.</para>
        ///   <para>The resolution keyword is an approximation of the spatial resolution of the digital elevation model. Many elevation sources are distributed in units of arc seconds; the keyword is an approximation in meters for easier understanding.</para>
        ///   <bulletList>
        ///     <bullet_item>Finest—The finest units available for the extent are used.</bullet_item><para/>
        ///     <bullet_item>10 meters—The elevation source resolution is 1/3 arc second or approximately 10 meters.</bullet_item><para/>
        ///     <bullet_item>24 meters—The elevation source is the Airbus WorldDEM4Ortho dataset at 24 meters resolution.</bullet_item><para/>
        ///     <bullet_item>30 meters—The elevation source resolution is 1 arc second or approximately 30 meters.</bullet_item><para/>
        ///     <bullet_item>90 meters—The elevation source resolution is 3 arc seconds or approximately 90 meters. This is the default.</bullet_item><para/>
        ///     <bullet_item>500 meters—The elevation source resolution is 15 arc seconds or approximately 500 meters.</bullet_item><para/>
        ///     <bullet_item>1000 meters—The elevation source resolution is 30 arc seconds or approximately 1000 meters.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定用于计算的源高程数据的近似空间分辨率（像元大小）。</para>
        ///   <para>resolution 关键字是数字高程模型空间分辨率的近似值。许多高程源以角秒为单位分布;关键字是以米为单位的近似值，以便于理解。</para>
        ///   <bulletList>
        ///     <bullet_item>最佳 - 使用范围中可用的最精细单位。</bullet_item><para/>
        ///     <bullet_item>10 米 - 高程源分辨率为 1/3 角秒或大约 10 米。</bullet_item><para/>
        ///     <bullet_item>24 米 - 高程源为分辨率为 24 米的 Airbus WorldDEM4Ortho 数据集。</bullet_item><para/>
        ///     <bullet_item>30 米 - 高程源分辨率为 1 角秒或大约 30 米。</bullet_item><para/>
        ///     <bullet_item>90 米 - 高程源分辨率为 3 角秒或大约 90 米。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>500 米 - 高程源分辨率为 15 角秒或大约 500 米。</bullet_item><para/>
        ///     <bullet_item>1000 米 - 高程源分辨率为 30 角秒或大约 1000 米。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("DEM Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _DEMResolution_value? _DEMResolution { get; set; } = null;

        public enum _DEMResolution_value
        {
            /// <summary>
            /// <para>Finest</para>
            /// <para>Finest—The finest units available for the extent are used.</para>
            /// <para>最佳 - 使用范围中可用的最精细单位。</para>
            /// </summary>
            [Description("Finest")]
            [GPEnumValue("FINEST")]
            _FINEST,

            /// <summary>
            /// <para>10 meters</para>
            /// <para>10 meters—The elevation source resolution is 1/3 arc second or approximately 10 meters.</para>
            /// <para>10 米 - 高程源分辨率为 1/3 角秒或大约 10 米。</para>
            /// </summary>
            [Description("10 meters")]
            [GPEnumValue("10m")]
            _10m,

            /// <summary>
            /// <para>24 meters</para>
            /// <para>24 meters—The elevation source is the Airbus WorldDEM4Ortho dataset at 24 meters resolution.</para>
            /// <para>24 米 - 高程源为分辨率为 24 米的 Airbus WorldDEM4Ortho 数据集。</para>
            /// </summary>
            [Description("24 meters")]
            [GPEnumValue("24m")]
            _24m,

            /// <summary>
            /// <para>30 meters</para>
            /// <para>30 meters—The elevation source resolution is 1 arc second or approximately 30 meters.</para>
            /// <para>30 米 - 高程源分辨率为 1 角秒或大约 30 米。</para>
            /// </summary>
            [Description("30 meters")]
            [GPEnumValue("30m")]
            _30m,

            /// <summary>
            /// <para>90 meters</para>
            /// <para>90 meters—The elevation source resolution is 3 arc seconds or approximately 90 meters. This is the default.</para>
            /// <para>90 米 - 高程源分辨率为 3 角秒或大约 90 米。这是默认设置。</para>
            /// </summary>
            [Description("90 meters")]
            [GPEnumValue("90m")]
            _90m,

            /// <summary>
            /// <para>500 meters</para>
            /// <para>500 meters—The elevation source resolution is 15 arc seconds or approximately 500 meters.</para>
            /// <para>500 米 - 高程源分辨率为 15 角秒或大约 500 米。</para>
            /// </summary>
            [Description("500 meters")]
            [GPEnumValue("500m")]
            _500m,

            /// <summary>
            /// <para>1000 meters</para>
            /// <para>1000 meters—The elevation source resolution is 30 arc seconds or approximately 1000 meters.</para>
            /// <para>1000 米 - 高程源分辨率为 30 角秒或大约 1000 米。</para>
            /// </summary>
            [Description("1000 meters")]
            [GPEnumValue("1000m")]
            _1000m,

        }

        /// <summary>
        /// <para>Maximum Sample Distance</para>
        /// <para>The maximum sample distance along the line used to sample elevation values.</para>
        /// <para>沿用于对高程值进行采样的线的最大采样距离。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Sample Distance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _MaximumSampleDistance { get; set; } = null;


        /// <summary>
        /// <para>Maximum Sample Distance Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the units for the Maximum Sample Distance parameter.</para>
        ///   <bulletList>
        ///     <bullet_item>Meters—The units are meters. This is the default.</bullet_item><para/>
        ///     <bullet_item>Kilometers—The units are kilometers.</bullet_item><para/>
        ///     <bullet_item>Feet—The units are feet.</bullet_item><para/>
        ///     <bullet_item>Yards—The units are yards.</bullet_item><para/>
        ///     <bullet_item>Miles—The units are miles.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定“最大采样距离”（Maximum Sample Distance） 参数的单位。</para>
        ///   <bulletList>
        ///     <bullet_item>米 - 单位为米。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>千米 - 单位为千米。</bullet_item><para/>
        ///     <bullet_item>英尺 - 单位为英尺。</bullet_item><para/>
        ///     <bullet_item>码 - 单位为码。</bullet_item><para/>
        ///     <bullet_item>英里—单位为英里。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Sample Distance Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _MaximumSampleDistanceUnits_value _MaximumSampleDistanceUnits { get; set; } = _MaximumSampleDistanceUnits_value._Meters;

        public enum _MaximumSampleDistanceUnits_value
        {
            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—The units are meters. This is the default.</para>
            /// <para>米 - 单位为米。这是默认设置。</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("Meters")]
            _Meters,

            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—The units are kilometers.</para>
            /// <para>千米 - 单位为千米。</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("Kilometers")]
            _Kilometers,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—The units are feet.</para>
            /// <para>英尺 - 单位为英尺。</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("Feet")]
            _Feet,

            /// <summary>
            /// <para>Yards</para>
            /// <para>Yards—The units are yards.</para>
            /// <para>码 - 单位为码。</para>
            /// </summary>
            [Description("Yards")]
            [GPEnumValue("Yards")]
            _Yards,

            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—The units are miles.</para>
            /// <para>英里—单位为英里。</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("Miles")]
            _Miles,

        }

        /// <summary>
        /// <para>Output Profile</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Profile")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _OutputProfile { get; set; }


        public Profile SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}